package com.yyg.boot.web;

import com.yyg.boot.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/5/13
 * @Description Description
 */
@Slf4j
@RestController
@RequestMapping("/users")
public class UserController {

    /**
     * 创建线程安全的Map
     */
    private static Map<Long, User> users = Collections.synchronizedMap(new HashMap<>());

    /**
     * 处理GET请求,用来获取用户列表.
     * 可以通过@RequestParam获取从页面中传递进来的查询条件或者翻页信息等参数.
     */
    @GetMapping(value="/")
    public List<User> getUserList() {
        return new ArrayList<>(users.values());
    }

    /**
     * 处理POST请求,用来创建User.
     * 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数.
     */
    @PostMapping(value="/")
    public String addUser(@RequestBody User user) {
        users.put(user.getId(), user);
        log.warn("user==="+users.get(user.getId()));
        return "success";
    }

    /**
     * 处理GET请求,用来获取url中id值的User信息;
     * url中的id可通过@PathVariable绑定到函数的参数中.
     */
    @GetMapping(value="/{id}")
    public User getUser(@PathVariable Long id) {
        return users.get(id);
    }

    /**
     * 处理PUT请求,用来更新User信息.
     */
    @PutMapping(value="/{id}")
    public String updateUser(@PathVariable Long id, @RequestBody User user) {
        User u = users.get(id);
        u.setName(user.getName());
        u.setAge(user.getAge());
        users.put(id, u);
        return "success";
    }

    /**
     * 处理DELETE请求,用来删除User
     */
    @DeleteMapping(value="/{id}")
    public String deleteUser(@PathVariable Long id) {
        users.remove(id);
        return "success";
    }

}
